package org.atlantis.grosbeak.cable.meta;

import javax.servlet.http.HttpServletRequest;

import org.atlantis.grosbeak.cable.ParamIndex;

/**
 * HttpServletRequest对象的封装接口。
 * 
 * @author <a href="mailto:seenoevil.cn@gmail.com">SeeNoEvil</a>
 * 
 */
public interface RequestAware {

	/**
	 * 相当于{@link HttpServletRequest#setAttribute(String, Object)}。
	 * 
	 * @param key
	 * @param value
	 */
	void setAttr(String key, Object value);

	/**
	 * 从request中获取POST方法提交来的数据。
	 * 
	 * @param key
	 * @return
	 */
	String getPostParam(String key);

	/**
	 * 从request中获取POST方法提交来的数据，并进行转型。
	 * 
	 * @param <T>
	 * @param type
	 * @param key
	 * @return
	 */
	<T> T getPostParam(Class<T> type, String key);

	/**
	 * 从request中获取GET方法提交来的数据。
	 * 
	 * @param index
	 *            数据在URL中的位置。
	 * @return
	 */
	String getGetParam(ParamIndex index);

	/**
	 * 从request中获取GET方法提交来的数据并转型。
	 * 
	 * @param <T>
	 * @param type
	 * @param index
	 *            数据在URL中的位置。
	 * @return
	 */
	<T> T getGetParam(Class<T> type, ParamIndex index);

	/**
	 * 获取当前的HttpServletRequest对象。
	 * 
	 * @return
	 */
	HttpServletRequest getSelf();
}
